#include<bits/stdc++.h>
//#define int long long
using namespace std;
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
    while(isdigit(ch)) x=x*10+(ch^48),ch=getchar();
    return x*f;
}
inline void write(int x)
{
    if(!x)
        putchar('0');
    char F[200];
    int tmp=x>0?x:-x;
    if(x<0)
        putchar('-');
    int cnt=0;
    while(tmp>0)
        F[cnt++]=tmp%10+'0',tmp/=10;
    while(cnt>0)
        putchar(F[--cnt]);
}
const int maxn=1e6+10;
int n,k;
int f[maxn],dp[maxn];
vector<int> edge[maxn];
inline int solve(int u,int v)
{
	if(v>k) 
		return dp[u];
	int sum=0;
	for(auto &i:edge[u])
		sum+=solve(i,v+1);
	return min(sum,dp[u]);
}
inline void dfs(int u)
{
	if(f[u]!=1) 
		dp[u]=1;
	for(auto &i:edge[u])
	{
		dfs(i);
		dp[u]+=solve(i,2);
	}
	return;
}
signed main()
{
	freopen("lost.in","r",stdin);
	freopen("lost.out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>f[i];
		if(i!=1) 
			edge[f[i]].push_back(i);
	}
	if(k==1)
	{
		int num=0;
		for(int i=1;i<=n;i++)
			if(f[i]!=1) 
				num++;
		printf("%d",num);
		return 0;
	}
	dfs(1);
	printf("%d\n",dp[1]);
	return 0;
}
